/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __55CE24F6_04C3_4BE4_85A5_B62005B1E930__
#define __55CE24F6_04C3_4BE4_85A5_B62005B1E930__

/////////////////////////////////////////////////////////////////////////////////////////
// 
namespace xos_box
{

    /////////////////////////////////////////////////////////////////////////////////////////
    // 
    // engine notify interface
    // 
    class i_notify : public xos::i_release
    {
    protected:
        virtual ~i_notify(){}

    public:
        // 设置参数
        virtual int set_threads( i_threads * pThreads, bool bUseSameThread ) = 0;
        virtual int set_thread( i_callback * pThread ) = 0;
        virtual int set_callback( xos::f_runnable pFun ) = 0;
        virtual int set_msg_type( int nType ) = 0;

        // 通知方法
        virtual int notify( i_msg *& pMsg, int nType, int nMsg ) = 0;
        virtual int notify( i_msg *& pMsg, int nMsg ) = 0;
        virtual int notify( i_msg *& pMsg ) = 0;
        virtual int notify_type( i_msg *& pMsg, int nType ) = 0;
        virtual int notify( int nMsg ) = 0;

        // 得到当前线程，两种情况可以得到线程：
        // 1、set_threads以bUseSameThread为true调用
        // 2、set_thread设置过线程了
        virtual i_callback * get_cur_thread() = 0;

        // 复制一个
        virtual i_notify * clone() = 0;
    };

    /////////////////////////////////////////////////////////////////////////////////////////
    // 
    // engine interface
    // 
    class i_engine : public xos::i_release
    {
    protected:
        virtual ~i_engine() {}

    public:
        // 
        // 创建通知接口
        // 
        virtual int create_notify( i_notify ** ppv ) = 0;

        // 
        // 必要参数
        // 
        virtual int set_fast_num( int nNum ) = 0;
        virtual int set_slow_num( int nNum ) = 0;

        // 
        // 得到线程
        // 
        virtual i_threads * fast_threads() = 0;
        virtual i_threads * slow_threads() = 0;

    };
}

#endif // __55CE24F6_04C3_4BE4_85A5_B62005B1E930__
